package com.hspedu.innerClass.category;

/**
 * 静态内部类
 * 使用static修饰的成员内部类
 */
public class StaticInnerClass {
    public static void main(String[] args) {
        Outer10 outer10 = new Outer10();
        outer10.m1();

        //其他类访问静态内部类
        //方式1
        Outer10.Inner10 inner10 = new Outer10.Inner10();
        inner10.say();

        //方式2：在外部类中写一个方法，可以返回静态内部类的实例，调用它
        Outer10.Inner10 innerClass = outer10.getInner10();
        innerClass.say();
    }
}

class Outer10{
    private int n1 = 10;
    private static String name = "张三";

    //1.放在外部类的成员位置
    //2.使用static修饰
    static class Inner10{
        String name = "zhangsan";
        public void say(){
            //可以访问外部类所有的静态成员，包含私有的，但不能访问非静态成员
            //可以添加任意访问修饰符 (public protected 默认 private), 因为它就是一个成员
            //作用域：同其他成员，为整个类体
            System.out.println("外部类的name = "+Outer10.name+ "内部类的name：" + name);
        }
    }

    //外部类访问内部类：先创建对象，再调用方法
    public void m1(){
        Inner10 inner10 = new Inner10();
        inner10.say();
    }

    //编写一个方法，可以返回静态内部类的实例
    public Inner10 getInner10(){
        return new Inner10();
    }
}